{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对于任何一家公司来讲，员工队伍的稳定性对于企业的发展都至关重要。之前马老师也说过，员工离职无非两个原因，其一是工资没有给到位，其二是员工干的不爽。所以员工离职预测的价值就愈发的凸显出来了，尤其对于HR部门，较早的预测可以帮助企业未雨绸缪，尽可能降低因为人员变动而给公司带来的损失。\n",
    "\n",
    "本项目的目标：\n",
    "- 读取员工离职数据集\n",
    "- 初步的探索性分析\n",
    "- 建立决策树模型\n",
    "- 建立支持向量机模型\n",
    "- 模型评估\n",
    "- 项目总结"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.读取数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "#导入数据分析的常用工具包\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns;sns.set()\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>satisfaction_level</th>\n",
       "      <th>last_evaluation</th>\n",
       "      <th>number_project</th>\n",
       "      <th>average_montly_hours</th>\n",
       "      <th>time_spend_company</th>\n",
       "      <th>Work_accident</th>\n",
       "      <th>left</th>\n",
       "      <th>promotion_last_5years</th>\n",
       "      <th>department</th>\n",
       "      <th>salary</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.38</td>\n",
       "      <td>0.53</td>\n",
       "      <td>2</td>\n",
       "      <td>157</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.80</td>\n",
       "      <td>0.86</td>\n",
       "      <td>5</td>\n",
       "      <td>262</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.11</td>\n",
       "      <td>0.88</td>\n",
       "      <td>7</td>\n",
       "      <td>272</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.72</td>\n",
       "      <td>0.87</td>\n",
       "      <td>5</td>\n",
       "      <td>223</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.37</td>\n",
       "      <td>0.52</td>\n",
       "      <td>2</td>\n",
       "      <td>159</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   satisfaction_level  last_evaluation  number_project  average_montly_hours  \\\n",
       "0                0.38             0.53               2                   157   \n",
       "1                0.80             0.86               5                   262   \n",
       "2                0.11             0.88               7                   272   \n",
       "3                0.72             0.87               5                   223   \n",
       "4                0.37             0.52               2                   159   \n",
       "\n",
       "   time_spend_company  Work_accident  left  promotion_last_5years department  \\\n",
       "0                   3              0     1                      0      sales   \n",
       "1                   6              0     1                      0      sales   \n",
       "2                   4              0     1                      0      sales   \n",
       "3                   5              0     1                      0      sales   \n",
       "4                   3              0     1                      0      sales   \n",
       "\n",
       "   salary  \n",
       "0     low  \n",
       "1  medium  \n",
       "2  medium  \n",
       "3     low  \n",
       "4     low  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#读取数据集，按照自己的文件路径读取\n",
    "df = pd.read_csv('D:\\\\Py_dataset\\\\HR_comma_sep.csv')\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 14999 entries, 0 to 14998\n",
      "Data columns (total 10 columns):\n",
      " #   Column                 Non-Null Count  Dtype  \n",
      "---  ------                 --------------  -----  \n",
      " 0   satisfaction_level     14999 non-null  float64\n",
      " 1   last_evaluation        14999 non-null  float64\n",
      " 2   number_project         14999 non-null  int64  \n",
      " 3   average_montly_hours   14999 non-null  int64  \n",
      " 4   time_spend_company     14999 non-null  int64  \n",
      " 5   Work_accident          14999 non-null  int64  \n",
      " 6   left                   14999 non-null  int64  \n",
      " 7   promotion_last_5years  14999 non-null  int64  \n",
      " 8   department             14999 non-null  object \n",
      " 9   salary                 14999 non-null  object \n",
      "dtypes: float64(2), int64(6), object(2)\n",
      "memory usage: 1.1+ MB\n"
     ]
    }
   ],
   "source": [
    "#查看数据集的基本信息\n",
    "df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>min</th>\n",
       "      <th>25%</th>\n",
       "      <th>50%</th>\n",
       "      <th>75%</th>\n",
       "      <th>max</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>satisfaction_level</th>\n",
       "      <td>14999.0</td>\n",
       "      <td>0.612834</td>\n",
       "      <td>0.248631</td>\n",
       "      <td>0.09</td>\n",
       "      <td>0.44</td>\n",
       "      <td>0.64</td>\n",
       "      <td>0.82</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>last_evaluation</th>\n",
       "      <td>14999.0</td>\n",
       "      <td>0.716102</td>\n",
       "      <td>0.171169</td>\n",
       "      <td>0.36</td>\n",
       "      <td>0.56</td>\n",
       "      <td>0.72</td>\n",
       "      <td>0.87</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>number_project</th>\n",
       "      <td>14999.0</td>\n",
       "      <td>3.803054</td>\n",
       "      <td>1.232592</td>\n",
       "      <td>2.00</td>\n",
       "      <td>3.00</td>\n",
       "      <td>4.00</td>\n",
       "      <td>5.00</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>average_montly_hours</th>\n",
       "      <td>14999.0</td>\n",
       "      <td>201.050337</td>\n",
       "      <td>49.943099</td>\n",
       "      <td>96.00</td>\n",
       "      <td>156.00</td>\n",
       "      <td>200.00</td>\n",
       "      <td>245.00</td>\n",
       "      <td>310.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>time_spend_company</th>\n",
       "      <td>14999.0</td>\n",
       "      <td>3.498233</td>\n",
       "      <td>1.460136</td>\n",
       "      <td>2.00</td>\n",
       "      <td>3.00</td>\n",
       "      <td>3.00</td>\n",
       "      <td>4.00</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Work_accident</th>\n",
       "      <td>14999.0</td>\n",
       "      <td>0.144610</td>\n",
       "      <td>0.351719</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>left</th>\n",
       "      <td>14999.0</td>\n",
       "      <td>0.238083</td>\n",
       "      <td>0.425924</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>promotion_last_5years</th>\n",
       "      <td>14999.0</td>\n",
       "      <td>0.021268</td>\n",
       "      <td>0.144281</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                         count        mean        std    min     25%     50%  \\\n",
       "satisfaction_level     14999.0    0.612834   0.248631   0.09    0.44    0.64   \n",
       "last_evaluation        14999.0    0.716102   0.171169   0.36    0.56    0.72   \n",
       "number_project         14999.0    3.803054   1.232592   2.00    3.00    4.00   \n",
       "average_montly_hours   14999.0  201.050337  49.943099  96.00  156.00  200.00   \n",
       "time_spend_company     14999.0    3.498233   1.460136   2.00    3.00    3.00   \n",
       "Work_accident          14999.0    0.144610   0.351719   0.00    0.00    0.00   \n",
       "left                   14999.0    0.238083   0.425924   0.00    0.00    0.00   \n",
       "promotion_last_5years  14999.0    0.021268   0.144281   0.00    0.00    0.00   \n",
       "\n",
       "                          75%    max  \n",
       "satisfaction_level       0.82    1.0  \n",
       "last_evaluation          0.87    1.0  \n",
       "number_project           5.00    7.0  \n",
       "average_montly_hours   245.00  310.0  \n",
       "time_spend_company       4.00   10.0  \n",
       "Work_accident            0.00    1.0  \n",
       "left                     0.00    1.0  \n",
       "promotion_last_5years    0.00    1.0  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#查看该数据集的统计结果\n",
    "df.describe().T"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 平均工作满意度在61%左右\n",
    "* 平均绩效在72%左右\n",
    "* 平均参与项目的数量为3.8\n",
    "* 平均每月工作时间为201小时\n",
    "* 该公司员工平均工作年限为3.5年\n",
    "* 2%的员工在过去5年内得到岗位上的晋升\n",
    "* 该公司的离职率为24%"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**数据特征解释说明**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "|Keywords|Meanning|type|value range|\n",
    "|-------|--------|----|-----|\n",
    "|satisfaction_level|员工满意度|数值型|0~1|\n",
    "|last_evalution|员工绩效|数值型|0~1|\n",
    "|number_probject|参与的项目数量|数值型|2~1|\n",
    "|average_monthly_hours|每月平均工作时间|数值型|96~310|\n",
    "|time_spend_company|工作年限|数值型|2~10|\n",
    "|work_accident|工作中是否出现差错|数值型|0和1|\n",
    "|left|是否离职|数值型|0和1|\n",
    "|promotion_last_5years|过去五年是否得到提升|数值型|0和1|\n",
    "|department|部门|object|类别值|\n",
    "|salary|薪资|object|类别值|"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(14999, 10)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#查看数据集的大小\n",
    "df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['satisfaction_level', 'last_evaluation', 'number_project',\n",
       "       'average_montly_hours', 'time_spend_company', 'Work_accident', 'left',\n",
       "       'promotion_last_5years', 'department', 'salary'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.columns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.初步探索性分析"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x24bae4186d8>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x720 with 4 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#绘制箱型图，观察不同特征与离职之间的关系\n",
    "\n",
    "plt.figure(figsize = (10,10))\n",
    "plt.subplot(2,2,1)\n",
    "sns.boxplot(x = 'left',y = 'satisfaction_level',data = df)\n",
    "\n",
    "\n",
    "plt.subplot(2,2,2)\n",
    "sns.boxplot(x = 'left',y = 'last_evaluation',data = df)\n",
    "\n",
    "plt.subplot(2,2,3)\n",
    "sns.boxplot(x = 'left',y = 'average_montly_hours',data = df)\n",
    "\n",
    "plt.subplot(2,2,4)\n",
    "sns.boxplot(x = 'left',y = 'time_spend_company',data = df)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 离职员工的工作满意度在40%左右，未离职员工的工作满意度在70%左右。\n",
    "* 离职员工的绩效评估较高，在0.8左右。\n",
    "* 离职员工的工作时长较长，在225小时左右。\n",
    "* 离职员工的工作年限在4年左右。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x24bae719198>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#观察离职与参与的项目的数量的关系\n",
    "sns.countplot(x = 'number_project',hue = 'left',data = df)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.建立决策树模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "satisfaction_level       float64\n",
       "last_evaluation          float64\n",
       "number_project             int64\n",
       "average_montly_hours       int64\n",
       "time_spend_company         int64\n",
       "Work_accident              int64\n",
       "left                       int64\n",
       "promotion_last_5years      int64\n",
       "department                object\n",
       "salary                    object\n",
       "dtype: object"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.dtypes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['low', 'medium', 'high'], dtype=object)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 对类别变量进行处理\n",
    "\n",
    "df['salary'].unique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['sales', 'accounting', 'hr', 'technical', 'support', 'management',\n",
       "       'IT', 'product_mng', 'marketing', 'RandD'], dtype=object)"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['department'].unique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>satisfaction_level</th>\n",
       "      <th>last_evaluation</th>\n",
       "      <th>number_project</th>\n",
       "      <th>average_montly_hours</th>\n",
       "      <th>time_spend_company</th>\n",
       "      <th>Work_accident</th>\n",
       "      <th>left</th>\n",
       "      <th>promotion_last_5years</th>\n",
       "      <th>department</th>\n",
       "      <th>salary</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.38</td>\n",
       "      <td>0.53</td>\n",
       "      <td>2</td>\n",
       "      <td>157</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.80</td>\n",
       "      <td>0.86</td>\n",
       "      <td>5</td>\n",
       "      <td>262</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.11</td>\n",
       "      <td>0.88</td>\n",
       "      <td>7</td>\n",
       "      <td>272</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.72</td>\n",
       "      <td>0.87</td>\n",
       "      <td>5</td>\n",
       "      <td>223</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.37</td>\n",
       "      <td>0.52</td>\n",
       "      <td>2</td>\n",
       "      <td>159</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   satisfaction_level  last_evaluation  number_project  average_montly_hours  \\\n",
       "0                0.38             0.53               2                   157   \n",
       "1                0.80             0.86               5                   262   \n",
       "2                0.11             0.88               7                   272   \n",
       "3                0.72             0.87               5                   223   \n",
       "4                0.37             0.52               2                   159   \n",
       "\n",
       "   time_spend_company  Work_accident  left  promotion_last_5years  department  \\\n",
       "0                   3              0     1                      0           0   \n",
       "1                   6              0     1                      0           0   \n",
       "2                   4              0     1                      0           0   \n",
       "3                   5              0     1                      0           0   \n",
       "4                   3              0     1                      0           0   \n",
       "\n",
       "   salary  \n",
       "0       0  \n",
       "1       1  \n",
       "2       1  \n",
       "3       0  \n",
       "4       0  "
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "department_map = {'sales':0, 'accounting':1, 'hr':2, 'technical':3, 'support':4, 'management':5,\n",
    "       'IT':6, 'product_mng':7, 'marketing':8, 'RandD':9}\n",
    "salary_map = {'low':0, 'medium':1, 'high':2}\n",
    "\n",
    "df['department'] = df['department'].map(department_map)\n",
    "df['salary'] = df['salary'].map(salary_map)\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对类别型变量最常用的处理方式是one_hot_encoding编码方式。上面我采用的是映射的方式，将每一个类别值都映射为一个单独的数字编码。但是这种做法也存在一个问题，将类别特征映射为1,2,3等数值，计算机会认为它们之间存在着相对的大小关系。所以推荐大家使用one_hot_encoding编码。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "#切分训练集个测试集\n",
    "label = df['left']\n",
    "train = df.drop('left',axis = 1)\n",
    "\n",
    "from sklearn.model_selection import train_test_split\n",
    "X_train,X_test,y_train,y_test = train_test_split(train,label,test_size = 0.3,random_state = 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9797777777777777"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#导入决策树模型\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "\n",
    "tree = DecisionTreeClassifier()\n",
    "tree.fit(X_train,y_train)\n",
    "tree.score(X_test,y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "#测试集的预测结果\n",
    "y_pred = tree.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[3398,   64],\n",
       "       [  27, 1011]], dtype=int64)"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#打印出混淆矩阵值\n",
    "from sklearn.metrics import confusion_matrix\n",
    "\n",
    "confusion_matrix(y_test,y_pred,labels = [0,1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    11428\n",
       "1     3571\n",
       "Name: left, dtype: int64"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['left'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9786666666666667 0.9730250481695568 0.9369202226345084\n"
     ]
    }
   ],
   "source": [
    "#检查模型的各项评估指标\n",
    "accuracy = (3394+1010)/(3394 + 68 + 28 +1010)\n",
    "precision = 1010/(1010+28)\n",
    "recall = 1010/(1010+68)\n",
    "print(accuracy,precision,recall)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 从三种评估指标可以看出，该树模型的效果还可以。\n",
    "- 直接使用classification_report方法更加的方便，可以直接打印出recall,precision,f1-score值等。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.支持向量机SVM算法预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\taon1\\Anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:196: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
      "  \"avoid this warning.\", FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[3344,  118],\n",
       "       [ 105,  933]], dtype=int64)"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.svm import SVC\n",
    "\n",
    "clf = SVC()\n",
    "clf.fit(X_train,y_train)\n",
    "y_pred = clf.predict(X_test)\n",
    "confusion_matrix(y_test,y_pred,labels = [0,1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9504444444444444 0.8988439306358381 0.8877259752616555\n"
     ]
    }
   ],
   "source": [
    "svc_accuracy = (3344 + 933)/(3344 + 118 +105 + 933)\n",
    "svc_recall = 933/(933+105)\n",
    "svc_precision = 933/(933+118)\n",
    "\n",
    "print(svc_accuracy,svc_recall,svc_precision)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在SVC算法中，使用算法默认的参数，其recall值和精度都较低。将未离职的人预测为离职的有118人，将离职的预测为未离职的人又105人。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 25 candidates, totalling 75 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 4 concurrent workers.\n",
      "[Parallel(n_jobs=-1)]: Done  33 tasks      | elapsed:  1.0min\n",
      "[Parallel(n_jobs=-1)]: Done  75 out of  75 | elapsed:  2.8min finished\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The train time usage:168.866\n"
     ]
    }
   ],
   "source": [
    "# 使用Gridsearch函数，对模型进行参数调优\n",
    "import time\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "clf = SVC()\n",
    "param_grid = {'C':[0.01,0.1,1,10,100],'gamma':[0.001,0.01,0.1,1,10] }\n",
    "grid = GridSearchCV(clf,param_grid = param_grid,cv = 3,n_jobs = -1,verbose = 2)\n",
    "t1 = time.time()\n",
    "grid.fit(X_train,y_train)\n",
    "t2 = time.time()\n",
    "print('The train time usage:{}'.format(round((t2-t1),3)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9587579769501857\n",
      "{'C': 100, 'gamma': 0.01}\n"
     ]
    }
   ],
   "source": [
    "print(grid.best_score_)\n",
    "print(grid.best_params_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "#采用最优的参数再次构建SVC模型\n",
    "\n",
    "svc = SVC(C = 100,gamma = 0.01)\n",
    "svc.fit(X_train,y_train)\n",
    "y_pred = svc.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[3374,   88],\n",
       "       [  82,  956]], dtype=int64)"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "confusion_matrix(y_test,y_pred,labels = [0,1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9622222222222222 0.9210019267822736 0.9377394636015326\n"
     ]
    }
   ],
   "source": [
    "accuracy = (3374+956)/(3374 + 88 + 82 + 956)\n",
    "recall = 956/(956+82)\n",
    "precision = 979/(956+88)\n",
    "print(accuracy,recall,precision)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通过参数调整，SVC模型的预测准确度较原始模型有了较大的提升。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Decisiontree</th>\n",
       "      <th>SVC</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>accuracy</th>\n",
       "      <td>0.9786</td>\n",
       "      <td>0.9622</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>recall</th>\n",
       "      <td>0.9730</td>\n",
       "      <td>0.9210</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>precision</th>\n",
       "      <td>0.9369</td>\n",
       "      <td>0.9377</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           Decisiontree     SVC\n",
       "accuracy         0.9786  0.9622\n",
       "recall           0.9730  0.9210\n",
       "precision        0.9369  0.9377"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#展示决策树和支持向量机算法的预测结果\n",
    "\n",
    "result = {'Decisiontree':[0.9786,0.9730,0.9369],'SVC':[0.9622,0.9210,0.9377]}\n",
    "pd.DataFrame(result,index = ['accuracy','recall','precision'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5.项目总结\n",
    "\n",
    "- 1.理解数据，理解数据集中每个特征的实际意义。\n",
    "- 2.探索性分析，理解影响因素与最终结果之间的关系，做到心中有数。此处定性的分析，也只能表达其相关性。\n",
    "- 3.建立决策树模型和支持向量机模型，其中支持向量机模型涉及到了参数优化。通过accuracy,recall,precision评估两个模型的效果。\n",
    "- 4.通过对比两个模型的效果，最终选择决策树算法。原因有两点，决策树算法简单，计算效率高，可解释性非常好。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
